#ifndef MFQ_H
#define MFQ_H

#define  MFQ_MAXSIZE  5  // 定义一个宏，表示优先级的数量

/*
 * 定义多级反馈队列的数据结构
 * 包括元素结点数据结构、队列数据结构、以及多级反馈队列表
 */ 
typedef struct ElemNode     // 元素结点
{
    int nid;                // 结点id，等与结点对应元素的优先级
    void* pEelm;            // 用一个泛型指针指向一个元素
    struct ElemNode* next; 
}ElemNode;

typedef struct QueueLink    // 链式队列
{
    ElemNode *qHead;        // 队头
    ElemNode *qTail;        // 队尾 
    int size;               // 队列元素的个数 
}QueueLink;

typedef struct MFQ  // 多级反馈队列表
{
    QueueLink* QueueTable[MFQ_MAXSIZE+1];
    int size;  // 记录多级反馈队列的大小
}MFQ_t;

ElemNode*   createElemNode();
QueueLink*  createQueueLink();
MFQ_t*      createMFQ();
void        push(MFQ_t *pMFQ, ElemNode *pNode);
ElemNode*   pop(MFQ_t *pMFQ);
ElemNode*   top(MFQ_t *pMFQ);
int         top_priority(MFQ_t *pMFQ);
ElemNode*   dispatch(MFQ_t *pMFQ);        // 调度算法


#endif